﻿using System;
using System.Data;
using System.Windows.Forms;
using UniMana.Utils.Data;
using DevExpress.XtraEditors;
using UniMana.Data;
using System.Data.Linq;
using System.Linq;

namespace UniMana.Win.Training
{
    public partial class Frm_Score2_ScoreEditRequire : DevExpress.XtraEditors.XtraForm
    {
        private DataTable m_tblTable = new DataTable();
        private DBMain m_data = new DBMain();
        private Guid m_gStudentKey;
        private int m_iClassKey;
        private int m_iTrainingScoreType;
        private string m_strID = "";
        private int m_iTraining_TrainingProgramKey = 0;

        public Frm_Score2_ScoreEditRequire()
        {
            InitializeComponent();
            m_tblTable = new DataTable();

            // Load dữ liệu vào lớp học phần
            m_tblTable = (m_data.m_DCReadOnly.Training_Subject_Classes.GetClassKeyID()).ToDataTable();
            lueTraining_Subject_Class.GetData(m_tblTable, "Training_Subject_ClassKey", "ID", noChoose: true);

            // Load dữ liệu vào sinh viên
            m_tblTable = (m_data.m_DCReadOnly.Training_Students.GetStudentKeyID(m_data.m_DCReadOnly.Training_Student_Classes)).ToDataTable();
            lueTraining_Student.GetData(m_tblTable, "Training_StudentKey", "ID");

            // Load dữ liệu vào loại điểm
            m_tblTable = (m_data.m_DCReadOnly.Training_ScoreTypes.GetData()).ToDataTable();
            lueTraining_ScoreType.GetData(m_tblTable, noChoose: true);
        }

        public Frm_Score2_ScoreEditRequire(int m_iClassKey, Guid m_gStudentKey, int m_iTrainingScoreType, int m_iTraining_TrainingProgramKey)
        {
            InitializeComponent();
            this.m_iClassKey = m_iClassKey;
            this.m_gStudentKey = m_gStudentKey;
            this.m_iTrainingScoreType = m_iTrainingScoreType;
            this.m_iTraining_TrainingProgramKey = m_iTraining_TrainingProgramKey;

            m_tblTable = new DataTable();

            // Load dữ liệu vào lớp học phần
            m_tblTable = (m_data.m_DCReadOnly.Training_Subject_Classes.GetClassKeyID()).ToDataTable();
            lueTraining_Subject_Class.GetData(m_tblTable, "Training_Subject_ClassKey", "ID", noChoose: true);
            lueTraining_Subject_Class.EditValue = m_iClassKey;
            lueTraining_Subject_Class.Enabled = false;

            // Load dữ liệu vào sinh viên
            m_tblTable = (m_data.m_DCReadOnly.Training_Students.GetStudentKeyID(m_data.m_DCReadOnly.Training_Student_Classes)).ToDataTable();
            lueTraining_Student.GetData(m_tblTable, "Training_StudentKey", "ID");
            lueTraining_Student.EditValue = m_gStudentKey;
            lueTraining_Student.Enabled = false;

            // Load dữ liệu vào loại điểm
            m_tblTable = (m_data.m_DCReadOnly.Training_ScoreTypes.GetData()).ToDataTable();
            lueTraining_ScoreType.GetData(m_tblTable, noChoose: true);

            lueTraining_ScoreType.EditValue = m_iTrainingScoreType;
            lueTraining_ScoreType.Enabled = false;
        }

        /// <summary>
        /// Kiểm tra đầy đủ thông tin
        /// </summary>
        /// <returns></returns>

        private int CheckInfo()
        {
            if ((gluPersonnel_PersonnelRepuiredBy.EditValue == null) || (lueTraining_Subject_Class.EditValue == null) || (lueTraining_Student.EditValue == null) || (lueTraining_ScoreType.EditValue == null) || (txtNewScore.Text == "") || (rtbNote.Text == ""))// || (txtOldScore.Text == "")
            {
                return 0;
            }
            else
            {
                return 1;
            }
        }
        
        /// <summary>
        /// Hàm tạo mã phiếu
        /// </summary>
        /// <returns></returns>

        private string CreateID()
        {
            string _ID = "PYCSD";
            m_tblTable = new DataTable();
            m_tblTable = (this.m_data.m_DCReadOnly.Log_ScoreEdits.GetLastRecord()).ToDataTable();
            if (m_tblTable.Rows.Count != 0)
            {
                string _prefixlast = (m_tblTable.Rows[0]["ID"].ToString()).Substring(_ID.Length, (m_tblTable.Rows[0]["ID"].ToString().Length - _ID.Length));
                int _a = Convert.ToInt16(_prefixlast);
                _a++;
                return (m_tblTable.Rows[0]["ID"].ToString()).Substring(0, _ID.Length) + _a.ToString();
            }
            else
            {
                return "PYCSD0";
            }
        }

        /// <summary>
        /// Hàm lấy và hiển thị mã phiếu
        /// </summary>

        private void CreateSheet()
        {
            m_strID = CreateID();
            if (m_strID == "PYCSD")
            {
                XtraMessageBox.Show("Không thể tạo mã phiếu yêu cầu");
                lbcID.Text = ".";
            }
            else
            {
                lbcID.Text = m_strID;
            }
        }

        /// <summary>
        /// Khởi tạo lại các giá trị chọn
        /// </summary>

        private void ResetValueControl()
        {
            gluPersonnel_PersonnelRepuiredBy.EditValue = null;
            lueTraining_Subject_Class.EditValue = null;
            lueTraining_Student.EditValue = null;
            lueTraining_ScoreType.EditValue = null;
            txtStudentName.Text = "";
            txtOldScore.Text = "";
            txtNewScore.Text = "";
            rtbNote.Text = "";
        }

        /// <summary>
        /// Form load
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void Frm_Score2_ScoreEditRequire_Load(object sender, EventArgs e)
        {
            lbcID.Text = ".";
            CreateSheet();
            LoadSheet();

            // Load dữ liệu vào người yêu cầu
            m_tblTable = (m_data.m_DCReadOnly.Personnel_Personnels.GetPersonnelKeyIDLastNameName()).ToDataTable();
            if (m_tblTable.Rows.Count != 0)
                gluPersonnel_PersonnelRepuiredBy.GetData(m_tblTable, "Personnel_PersonnelKey", "FullName");

            Personnel_PersonnelInfo perInfo = new Personnel_PersonnelInfo(Guid.Parse(SysGlobalVar.g_sta_sysUserLogin.Properties.Personnel_PersonnelKey.ToString()));

            if (perInfo.Properties.Personnel_PersonnelKey != null)
            {
                gluPersonnel_PersonnelRepuiredBy.EditValue = perInfo.Properties.Personnel_PersonnelKey.ToString();
                gluPersonnel_PersonnelRepuiredBy.Enabled = false;
            }

            rluTraining_ScoreType.GetData(m_data.m_DCReadOnly.Training_ScoreTypes, "Training_ScoreTypeKey", "Name");
            rluTraining_Student_Class.GetData(m_data.m_DCReadOnly.Training_Student_Classes, "Training_StudentKey", "ID");
            rluTraining_Subject_Class.GetData(m_data.m_DCReadOnly.Training_Subject_Classes, "Training_Subject_ClassKey", "ID");
        }

        /// <summary>
        /// Lấy và hiển thị dữ liệu
        /// </summary>

        private void LoadSheet()
        {
            m_tblTable = new DataTable();
            m_tblTable = (this.m_data.m_DCReadOnly.Log_ScoreEdits.GetDataByPerson(SysGlobalVar.g_sta_sysUserLogin.Properties.System_UserKey.ToString())).ToDataTable();
            if (m_tblTable.Rows.Count != 0)
                gctView.DataSource = m_tblTable;
            else
                gctView.DataSource = null;
        }

        /// <summary>
        /// Chọn lớp học phần
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void lueTraining_Subject_Class_EditValueChanged(object sender, EventArgs e)
        {
            //try
            //{
                if (GetValueLookUpEdit.ConvertValueToInt(lueTraining_Subject_Class.EditValue) > 0)
                {
                    lueTraining_ScoreType.EditValue = null;
                    m_tblTable = (m_data.m_DCReadOnly.Training_Students.GetStudentKeyIDByClassKey(m_data.m_DCReadOnly.Training_Student_Classes, m_data.m_DCReadOnly.Training_Student_Subject_Classes, GetValueLookUpEdit.ConvertValueToInt(lueTraining_Subject_Class.EditValue))).ToDataTable();
                    lueTraining_Student.EditValue = null;
                    lueTraining_Student.GetData(m_tblTable, "Training_StudentKey", "ID");
                }
            //}
            //catch { }
        }
        
        /// <summary>
        /// Chọn sinh viên
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void lueTraining_Student_EditValueChanged(object sender, EventArgs e)
        {
            //try
            //{
                if (lueTraining_Student.EditValue != null)
                {
                    lueTraining_ScoreType.EditValue = null;
                    Training_StudentInfo stdinfo = new Training_StudentInfo(lueTraining_Student.EditValue.ToString());
                    if (stdinfo.Properties.Training_StudentKey != null)
                    {
                        txtStudentName.Text = stdinfo.Properties.LastName + " " + stdinfo.Properties.SureName;
                    }
                }
                else
                {
                    txtStudentName.Text = "";
                }
            //}
            //catch { }
        }

        /// <summary>
        /// Chọn loại điểm
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void lueTraining_ScoreType_EditValueChanged(object sender, EventArgs e)
        {
            //try
            //{
                if ((GetValueLookUpEdit.ConvertValueToInt(lueTraining_ScoreType.EditValue) > 0) && (GetValueLookUpEdit.ConvertValueToInt(lueTraining_Subject_Class.EditValue) > 0) && (lueTraining_Student.EditValue != null))
                {
                    Training_ScoreInfo scoreinfo = new Training_ScoreInfo(lueTraining_Student.EditValue.ToString(),
                        GetValueLookUpEdit.ConvertValueToInt(lueTraining_Subject_Class.EditValue),
                        GetValueLookUpEdit.ConvertValueToInt(lueTraining_ScoreType.EditValue));
                    if (scoreinfo.Properties.Training_Subject_ClassKey > 0)
                    {
                        txtOldScore.Text = scoreinfo.Properties.Score.ToString();
                    }
                    //else
                    //{
                    //    XtraMessageBox.Show("Không tìm thấy điểm với thông tin hiện tại");
                    //    txtOldScore.Text = "";
                    //}
                }
                else
                {
                    txtOldScore.Text = "";
                }
            //}
            //catch { }
        }

        /// <summary>
        /// Kiểm tra chọn lớp học phần và sinh viên trước khi chọn loại điểm
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void lueTraining_ScoreType_Click(object sender, EventArgs e)
        {
            //try
            //{
                if ((GetValueLookUpEdit.ConvertValueToInt(lueTraining_Subject_Class.EditValue) > 0) && (lueTraining_Student.EditValue != null))
                { }
                else
                {
                    XtraMessageBox.Show("Vui lòng chọn lớp học phần và sinh viên");
                }
            //}
            //catch { }
        }

        /// <summary>
        /// Tạo và lưu phiếu yêu cầu
        /// </summary>

        string _flagID = "";
        private void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                if (_flagID != m_strID)
                {
                    if (CheckInfo() == 1)
                    {
                        Log_ScoreEditInfo loginfo = new Log_ScoreEditInfo();
                        loginfo.Properties.ID = lbcID.Text;
                        loginfo.Properties.RepuiredBy = Guid.Parse(gluPersonnel_PersonnelRepuiredBy.EditValue.ToString());
                        loginfo.Properties.Training_Subject_ClassKey = int.Parse(lueTraining_Subject_Class.EditValue.ToString());
                        loginfo.Properties.Training_StudentKey = Guid.Parse(lueTraining_Student.EditValue.ToString());
                        loginfo.Properties.Training_ScoreTypeKey = int.Parse(lueTraining_ScoreType.EditValue.ToString());
                        if (txtOldScore.Text != "")
                            loginfo.Properties.OldScore = Convert.ToDouble(txtOldScore.Text);
                        loginfo.Properties.NewScore = Convert.ToDouble(txtNewScore.Text);
                        loginfo.Properties.AccountRequire = UniMana.Utils.LoginInfo.GblLoginInfo.sysLoginUserKey;
                        loginfo.Properties.CreateOn = SysDateTime.Now;
                        loginfo.Properties.Reasons = rtbNote.Text;
                        loginfo.Properties.Permit = false;
                        loginfo.Properties.Refuse = false;
                        loginfo.Properties.Status = false;
                        loginfo.Properties.Training_TrainingProgramKey = m_iTraining_TrainingProgramKey;
                        loginfo.Save();
                        _flagID = m_strID;
                        XtraMessageBox.Show("Đã gửi phiếu yêu cầu số " + m_strID);
                        LoadSheet();
                    }
                    else
                    {
                        XtraMessageBox.Show("Vui lòng chọn đầy đủ để tạo phiếu");
                    }
                }
                else
                {
                    XtraMessageBox.Show("Vui lòng tạo phiếu yêu cầu mới");
                }
            }
            catch { XtraMessageBox.Show("Không gửi được phiếu. Vui lòng kiểm tra lại"); }
        }

        /// <summary>
        /// Tắt phiếu yêu cầu
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void btnClose_Click(object sender, EventArgs e)
        {
            DialogResult result;
            result = XtraMessageBox.Show("Bạn có muốn tắt phiếu yêu cầu", "Thông báo", MessageBoxButtons.YesNo);
            if (result == DialogResult.Yes)
            {
                this.Close();
            }
        }

        /// <summary>
        /// Thao tác tạo mới phiếu
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void lbcNew_Click(object sender, EventArgs e)
        {
            CreateSheet();
            ResetValueControl();
            XtraMessageBox.Show("Đã tạo mã phiếu số " + lbcID.Text);
        }

        private void gctView_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                int _ID = int.Parse(grvView.GetRowCellValue(grvView.FocusedRowHandle, "Log_ScoreEditKey").ToString());
                Frm_Score2_ScoreEditRequire_SubDetail detail = new Frm_Score2_ScoreEditRequire_SubDetail(_ID);
                detail.ShowDialog();
            }
            catch { }
        }


    }
}
